Micron Document
🎖️GitЯра🎖️


Displaying Raw • Download

feature/map/src/androidHostTest/kotlin/org/meshtastic/feature/map/component/EditWaypointDialogTest.kt 4e48e64e786b58d7c73280f7aa6ebf55be9e53e5 (4e48e64e) Text, 10.40 KB

T8b949e/*
* Copyright (c) 2026 Meshtastic LLC
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
Tff7b72package T7ee787org.meshtastic.feature.map.component

Tff7b72import T7ee787androidx.compose.ui.test.ExperimentalTestApi
Tff7b72import T7ee787androidx.compose.ui.test.assertCountEquals
Tff7b72import T7ee787androidx.compose.ui.test.assertIsDisplayed
Tff7b72import T7ee787androidx.compose.ui.test.onAllNodesWithText
Tff7b72import T7ee787androidx.compose.ui.test.onNodeWithText
Tff7b72import T7ee787androidx.compose.ui.test.performClick
Tff7b72import T7ee787androidx.compose.ui.test.performTextInput
Tff7b72import T7ee787androidx.compose.ui.test.v2.runComposeUiTest
Tff7b72import T7ee787okio.ByteString.Companion.encodeUtf8
Tff7b72import T7ee787org.junit.Test
Tff7b72import T7ee787org.junit.runner.RunWith
Tff7b72import T7ee787org.meshtastic.core.model.NodeAddress
Tff7b72import T7ee787org.meshtastic.core.resources.Res
Tff7b72import T7ee787org.meshtastic.core.resources.getString
Tff7b72import T7ee787org.meshtastic.core.resources.node_filter_placeholder
Tff7b72import T7ee787org.meshtastic.core.resources.send
Tff7b72import T7ee787org.meshtastic.core.resources.waypoint_recipient_broadcast
Tff7b72import T7ee787org.meshtastic.core.testing.TestDataFactory
Tff7b72import T7ee787org.meshtastic.proto.ChannelSet
Tff7b72import T7ee787org.meshtastic.proto.ChannelSettings
Tff7b72import T7ee787org.meshtastic.proto.Config.DisplayConfig.DisplayUnits
Tff7b72import T7ee787org.meshtastic.proto.Waypoint
Tff7b72import T7ee787org.robolectric.RobolectricTestRunner
Tff7b72import T7ee787org.robolectric.annotation.Config
Tff7b72import T7ee787kotlin.test.assertEquals

Tf0883e@OptInTb4b4b4(Te6edf3ExperimentalTestApiTff7b72::Te6edf3classTb4b4b4)
Tf0883e@RunWithTb4b4b4(Te6edf3RobolectricTestRunnerTff7b72::Te6edf3classTb4b4b4)
Tf0883e@ConfigTb4b4b4(Te6edf3sdk Tff7b72= Tff7b72[T79c0ff3T79c0ff4Tff7b72]Tb4b4b4)
Tff7b72class T56d364EditWaypointDialogTest Tb4b4b4{

Tff7b72private Tff7b72val Te6edf3waypoint Tff7b72= Te6edf3WaypointTb4b4b4(Te6edf3id Tff7b72= T79c0ff1Tb4b4b4, Te6edf3name Tff7b72= Ta5d6ff"Ta5d6ffTest WaypointTa5d6ff"Tb4b4b4)
Tff7b72private Tff7b72val Te6edf3node Tff7b72= Te6edf3TestDataFactoryTb4b4b4.Te6edf3createTestNodeTb4b4b4(Te6edf3num Tff7b72= T79c0ff4T79c0ff2Tb4b4b4, Te6edf3userId Tff7b72= Ta5d6ff"Ta5d6ff!a1b2c3d4Ta5d6ff"Tb4b4b4, Te6edf3longName Tff7b72= Ta5d6ff"Ta5d6ffAliceTa5d6ff"Tb4b4b4)
Tff7b72private Tff7b72val Te6edf3channelSet Tff7b72=
Te6edf3ChannelSetTb4b4b4(Te6edf3settings Tff7b72= Te6edf3listOfTb4b4b4(Te6edf3ChannelSettingsTb4b4b4(Te6edf3name Tff7b72= Ta5d6ff"Ta5d6ffPrimaryTa5d6ff"Tb4b4b4)Tb4b4b4, Te6edf3ChannelSettingsTb4b4b4(Te6edf3name Tff7b72= Ta5d6ff"Ta5d6ffSecondaryTa5d6ff"Tb4b4b4)Tb4b4b4)Tb4b4b4)

Tf0883e@Test
Tff7b72fun Td2a8ffsendDefaultsToPrimaryChannelTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runComposeUiTest Tb4b4b4{
Tff7b72var Te6edf3sentContactKeyTb4b4b4: Tffa657String? Tff7b72= Tff7b72null
Te6edf3setContent Tb4b4b4{
Te6edf3EditWaypointDialogTb4b4b4(
Te6edf3waypoint Tff7b72= Te6edf3waypointTb4b4b4,
Te6edf3displayUnits Tff7b72= Te6edf3DisplayUnitsTb4b4b4.Te6edf3METRICTb4b4b4,
Te6edf3nodes Tff7b72= Te6edf3listOfTb4b4b4(Te6edf3nodeTb4b4b4)Tb4b4b4,
Te6edf3ourNode Tff7b72= Tff7b72nullTb4b4b4,
Te6edf3channelSet Tff7b72= Te6edf3channelSetTb4b4b4,
Te6edf3onSend Tff7b72= Tb4b4b4{ Te6edf3_Tb4b4b4, Te6edf3contactKey Tff7b72-Tff7b72> Te6edf3sentContactKey Tff7b72= Te6edf3contactKey Tb4b4b4}Tb4b4b4,
Te6edf3onDelete Tff7b72= Tb4b4b4{Tb4b4b4}Tb4b4b4,
Te6edf3onDismissRequest Tff7b72= Tb4b4b4{Tb4b4b4}Tb4b4b4,
Tb4b4b4)
Tb4b4b4}

T8b949e// The primary channel (index 0) is labelled with its configured name, not a generic "Broadcast" string.
Te6edf3onNodeWithTextTb4b4b4(Ta5d6ff"Ta5d6ffPrimaryTa5d6ff"Tb4b4b4)Tb4b4b4.Te6edf3assertIsDisplayedTb4b4b4(Tb4b4b4)
Te6edf3onNodeWithTextTb4b4b4(Te6edf3getStringTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3sendTb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3performClickTb4b4b4(Tb4b4b4)

Te6edf3assertEqualsTb4b4b4(Ta5d6ff"Ta5d6ff0Tffd700${Te6edf3NodeAddressTb4b4b4.Te6edf3ID_BROADCASTTffd700}Ta5d6ff"Tb4b4b4, Te6edf3sentContactKeyTb4b4b4)
Tb4b4b4}

Tf0883e@Test
Tff7b72fun Td2a8ffsendDefaultsToGenericBroadcastLabelWhenChannelSetUnavailableTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runComposeUiTest Tb4b4b4{
Te6edf3setContent Tb4b4b4{
Te6edf3EditWaypointDialogTb4b4b4(
Te6edf3waypoint Tff7b72= Te6edf3waypointTb4b4b4,
Te6edf3displayUnits Tff7b72= Te6edf3DisplayUnitsTb4b4b4.Te6edf3METRICTb4b4b4,
Te6edf3nodes Tff7b72= Te6edf3listOfTb4b4b4(Te6edf3nodeTb4b4b4)Tb4b4b4,
Te6edf3ourNode Tff7b72= Tff7b72nullTb4b4b4,
Te6edf3channelSet Tff7b72= Tff7b72nullTb4b4b4,
Te6edf3onSend Tff7b72= Tb4b4b4{ Te6edf3_Tb4b4b4, Te6edf3_ Tff7b72-Tff7b72> Tb4b4b4}Tb4b4b4,
Te6edf3onDelete Tff7b72= Tb4b4b4{Tb4b4b4}Tb4b4b4,
Te6edf3onDismissRequest Tff7b72= Tb4b4b4{Tb4b4b4}Tb4b4b4,
Tb4b4b4)
Tb4b4b4}

T8b949e// No channel info (e.g. disconnected) falls back to the generic "Broadcast" label.
Te6edf3onNodeWithTextTb4b4b4(Te6edf3getStringTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3waypoint_recipient_broadcastTb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3assertIsDisplayedTb4b4b4(Tb4b4b4)
Tb4b4b4}

Tf0883e@Test
Tff7b72fun Td2a8ffsendOffersOnlyBroadcastWhenChannelSetSettingsIsEmptyTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runComposeUiTest Tb4b4b4{
Te6edf3setContent Tb4b4b4{
Te6edf3EditWaypointDialogTb4b4b4(
Te6edf3waypoint Tff7b72= Te6edf3waypointTb4b4b4,
Te6edf3displayUnits Tff7b72= Te6edf3DisplayUnitsTb4b4b4.Te6edf3METRICTb4b4b4,
Te6edf3nodes Tff7b72= Te6edf3listOfTb4b4b4(Te6edf3nodeTb4b4b4)Tb4b4b4,
Te6edf3ourNode Tff7b72= Tff7b72nullTb4b4b4,
T8b949e// Non-null but empty settings (e.g. right after a fresh install, before channel sync completes) must
T8b949e// still offer a Broadcast option rather than rendering zero channel rows.
Te6edf3channelSet Tff7b72= Te6edf3ChannelSetTb4b4b4(Te6edf3settings Tff7b72= Te6edf3emptyListTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4,
Te6edf3onSend Tff7b72= Tb4b4b4{ Te6edf3_Tb4b4b4, Te6edf3_ Tff7b72-Tff7b72> Tb4b4b4}Tb4b4b4,
Te6edf3onDelete Tff7b72= Tb4b4b4{Tb4b4b4}Tb4b4b4,
Te6edf3onDismissRequest Tff7b72= Tb4b4b4{Tb4b4b4}Tb4b4b4,
Tb4b4b4)
Tb4b4b4}

Te6edf3onNodeWithTextTb4b4b4(Te6edf3getStringTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3waypoint_recipient_broadcastTb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3assertIsDisplayedTb4b4b4(Tb4b4b4)
Tb4b4b4}

Tf0883e@Test
Tff7b72fun Td2a8ffpickingANonPkcNodeRoutesViaItsOwnChannelTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runComposeUiTest Tb4b4b4{
Tff7b72var Te6edf3sentContactKeyTb4b4b4: Tffa657String? Tff7b72= Tff7b72null
Te6edf3setContent Tb4b4b4{
Te6edf3EditWaypointDialogTb4b4b4(
Te6edf3waypoint Tff7b72= Te6edf3waypointTb4b4b4,
Te6edf3displayUnits Tff7b72= Te6edf3DisplayUnitsTb4b4b4.Te6edf3METRICTb4b4b4,
Te6edf3nodes Tff7b72= Te6edf3listOfTb4b4b4(Te6edf3nodeTb4b4b4)Tb4b4b4,
Te6edf3ourNode Tff7b72= Tff7b72nullTb4b4b4,
Te6edf3channelSet Tff7b72= Te6edf3channelSetTb4b4b4,
Te6edf3onSend Tff7b72= Tb4b4b4{ Te6edf3_Tb4b4b4, Te6edf3contactKey Tff7b72-Tff7b72> Te6edf3sentContactKey Tff7b72= Te6edf3contactKey Tb4b4b4}Tb4b4b4,
Te6edf3onDelete Tff7b72= Tb4b4b4{Tb4b4b4}Tb4b4b4,
Te6edf3onDismissRequest Tff7b72= Tb4b4b4{Tb4b4b4}Tb4b4b4,
Tb4b4b4)
Tb4b4b4}

T8b949e// The clickable element is the TextButton showing the *current* recipient value ("Primary" before any
T8b949e// selection), not the static "Send to" label beside it.
Te6edf3onNodeWithTextTb4b4b4(Ta5d6ff"Ta5d6ffPrimaryTa5d6ff"Tb4b4b4)Tb4b4b4.Te6edf3performClickTb4b4b4(Tb4b4b4)
Te6edf3onNodeWithTextTb4b4b4(Ta5d6ff"Ta5d6ffAliceTa5d6ff"Tb4b4b4)Tb4b4b4.Te6edf3assertIsDisplayedTb4b4b4(Tb4b4b4)
Te6edf3onNodeWithTextTb4b4b4(Ta5d6ff"Ta5d6ffAliceTa5d6ff"Tb4b4b4)Tb4b4b4.Te6edf3performClickTb4b4b4(Tb4b4b4)
Te6edf3onNodeWithTextTb4b4b4(Te6edf3getStringTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3sendTb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3performClickTb4b4b4(Tb4b4b4)

T8b949e// Neither this node nor our local node advertises PKC, so the DM routes on the node's own channel (0),
T8b949e// not the PKC channel index — matching NodeListViewModel.getDirectMessageRoute's convention.
Te6edf3assertEqualsTb4b4b4(Ta5d6ff"Ta5d6ff0!a1b2c3d4Ta5d6ff"Tb4b4b4, Te6edf3sentContactKeyTb4b4b4)
Tb4b4b4}

Tf0883e@Test
Tff7b72fun Td2a8ffpickingAPkcCapableNodeRoutesViaPkcChannelTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runComposeUiTest Tb4b4b4{
Tff7b72var Te6edf3sentContactKeyTb4b4b4: Tffa657String? Tff7b72= Tff7b72null
Tff7b72val Te6edf3pkcNode Tff7b72= Te6edf3nodeTb4b4b4.Te6edf3copyTb4b4b4(Te6edf3publicKey Tff7b72= Ta5d6ff"Ta5d6ffnode-keyTa5d6ff"Tb4b4b4.Te6edf3encodeUtf8Tb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72val Te6edf3ourPkcNode Tff7b72=
Te6edf3TestDataFactoryTb4b4b4.Te6edf3createTestNodeTb4b4b4(Te6edf3num Tff7b72= T79c0ff1Tb4b4b4, Te6edf3userId Tff7b72= Ta5d6ff"Ta5d6ff!local0001Ta5d6ff"Tb4b4b4)Tb4b4b4.Te6edf3copyTb4b4b4(Te6edf3publicKey Tff7b72= Ta5d6ff"Ta5d6ffour-keyTa5d6ff"Tb4b4b4.Te6edf3encodeUtf8Tb4b4b4(Tb4b4b4)Tb4b4b4)
Te6edf3setContent Tb4b4b4{
Te6edf3EditWaypointDialogTb4b4b4(
Te6edf3waypoint Tff7b72= Te6edf3waypointTb4b4b4,
Te6edf3displayUnits Tff7b72= Te6edf3DisplayUnitsTb4b4b4.Te6edf3METRICTb4b4b4,
Te6edf3nodes Tff7b72= Te6edf3listOfTb4b4b4(Te6edf3pkcNodeTb4b4b4)Tb4b4b4,
Te6edf3ourNode Tff7b72= Te6edf3ourPkcNodeTb4b4b4,
Te6edf3channelSet Tff7b72= Te6edf3channelSetTb4b4b4,
Te6edf3onSend Tff7b72= Tb4b4b4{ Te6edf3_Tb4b4b4, Te6edf3contactKey Tff7b72-Tff7b72> Te6edf3sentContactKey Tff7b72= Te6edf3contactKey Tb4b4b4}Tb4b4b4,
Te6edf3onDelete Tff7b72= Tb4b4b4{Tb4b4b4}Tb4b4b4,
Te6edf3onDismissRequest Tff7b72= Tb4b4b4{Tb4b4b4}Tb4b4b4,
Tb4b4b4)
Tb4b4b4}

Te6edf3onNodeWithTextTb4b4b4(Ta5d6ff"Ta5d6ffPrimaryTa5d6ff"Tb4b4b4)Tb4b4b4.Te6edf3performClickTb4b4b4(Tb4b4b4)
Te6edf3onNodeWithTextTb4b4b4(Ta5d6ff"Ta5d6ffAliceTa5d6ff"Tb4b4b4)Tb4b4b4.Te6edf3performClickTb4b4b4(Tb4b4b4)
Te6edf3onNodeWithTextTb4b4b4(Te6edf3getStringTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3sendTb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3performClickTb4b4b4(Tb4b4b4)

T8b949e// Both ends support PKC, so the DM routes on the dedicated PKC channel index.
Te6edf3assertEqualsTb4b4b4(Ta5d6ff"Tffd700${Te6edf3NodeAddressTb4b4b4.Te6edf3PKC_CHANNEL_INDEXTffd700}Ta5d6ff!a1b2c3d4Ta5d6ff"Tb4b4b4, Te6edf3sentContactKeyTb4b4b4)
Tb4b4b4}

Tf0883e@Test
Tff7b72fun Td2a8ffpickingASecondaryChannelRoutesSendToThatChannelTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runComposeUiTest Tb4b4b4{
Tff7b72var Te6edf3sentContactKeyTb4b4b4: Tffa657String? Tff7b72= Tff7b72null
Te6edf3setContent Tb4b4b4{
Te6edf3EditWaypointDialogTb4b4b4(
Te6edf3waypoint Tff7b72= Te6edf3waypointTb4b4b4,
Te6edf3displayUnits Tff7b72= Te6edf3DisplayUnitsTb4b4b4.Te6edf3METRICTb4b4b4,
Te6edf3nodes Tff7b72= Te6edf3listOfTb4b4b4(Te6edf3nodeTb4b4b4)Tb4b4b4,
Te6edf3ourNode Tff7b72= Tff7b72nullTb4b4b4,
Te6edf3channelSet Tff7b72= Te6edf3channelSetTb4b4b4,
Te6edf3onSend Tff7b72= Tb4b4b4{ Te6edf3_Tb4b4b4, Te6edf3contactKey Tff7b72-Tff7b72> Te6edf3sentContactKey Tff7b72= Te6edf3contactKey Tb4b4b4}Tb4b4b4,
Te6edf3onDelete Tff7b72= Tb4b4b4{Tb4b4b4}Tb4b4b4,
Te6edf3onDismissRequest Tff7b72= Tb4b4b4{Tb4b4b4}Tb4b4b4,
Tb4b4b4)
Tb4b4b4}

Te6edf3onNodeWithTextTb4b4b4(Ta5d6ff"Ta5d6ffPrimaryTa5d6ff"Tb4b4b4)Tb4b4b4.Te6edf3performClickTb4b4b4(Tb4b4b4)
Te6edf3onNodeWithTextTb4b4b4(Ta5d6ff"Ta5d6ffSecondaryTa5d6ff"Tb4b4b4)Tb4b4b4.Te6edf3assertIsDisplayedTb4b4b4(Tb4b4b4)
Te6edf3onNodeWithTextTb4b4b4(Ta5d6ff"Ta5d6ffSecondaryTa5d6ff"Tb4b4b4)Tb4b4b4.Te6edf3performClickTb4b4b4(Tb4b4b4)
Te6edf3onNodeWithTextTb4b4b4(Te6edf3getStringTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3sendTb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3performClickTb4b4b4(Tb4b4b4)

Te6edf3assertEqualsTb4b4b4(Ta5d6ff"Ta5d6ff1Tffd700${Te6edf3NodeAddressTb4b4b4.Te6edf3ID_BROADCASTTffd700}Ta5d6ff"Tb4b4b4, Te6edf3sentContactKeyTb4b4b4)
Tb4b4b4}

Tf0883e@Test
Tff7b72fun Td2a8ffinitialContactKeySeedsTheSelectedRecipientTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runComposeUiTest Tb4b4b4{
Tff7b72var Te6edf3sentContactKeyTb4b4b4: Tffa657String? Tff7b72= Tff7b72null
Te6edf3setContent Tb4b4b4{
Te6edf3EditWaypointDialogTb4b4b4(
Te6edf3waypoint Tff7b72= Te6edf3waypointTb4b4b4,
Te6edf3displayUnits Tff7b72= Te6edf3DisplayUnitsTb4b4b4.Te6edf3METRICTb4b4b4,
Te6edf3nodes Tff7b72= Te6edf3listOfTb4b4b4(Te6edf3nodeTb4b4b4)Tb4b4b4,
Te6edf3ourNode Tff7b72= Tff7b72nullTb4b4b4,
Te6edf3channelSet Tff7b72= Te6edf3channelSetTb4b4b4,
T8b949e// Simulates re-opening the dialog after geofence box authoring with a previously-picked recipient.
Te6edf3initialContactKey Tff7b72= Ta5d6ff"Ta5d6ff1Tffd700${Te6edf3NodeAddressTb4b4b4.Te6edf3ID_BROADCASTTffd700}Ta5d6ff"Tb4b4b4,
Te6edf3onSend Tff7b72= Tb4b4b4{ Te6edf3_Tb4b4b4, Te6edf3contactKey Tff7b72-Tff7b72> Te6edf3sentContactKey Tff7b72= Te6edf3contactKey Tb4b4b4}Tb4b4b4,
Te6edf3onDelete Tff7b72= Tb4b4b4{Tb4b4b4}Tb4b4b4,
Te6edf3onDismissRequest Tff7b72= Tb4b4b4{Tb4b4b4}Tb4b4b4,
Tb4b4b4)
Tb4b4b4}

Te6edf3onNodeWithTextTb4b4b4(Ta5d6ff"Ta5d6ffSecondaryTa5d6ff"Tb4b4b4)Tb4b4b4.Te6edf3assertIsDisplayedTb4b4b4(Tb4b4b4)
Te6edf3onNodeWithTextTb4b4b4(Te6edf3getStringTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3sendTb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3performClickTb4b4b4(Tb4b4b4)

Te6edf3assertEqualsTb4b4b4(Ta5d6ff"Ta5d6ff1Tffd700${Te6edf3NodeAddressTb4b4b4.Te6edf3ID_BROADCASTTffd700}Ta5d6ff"Tb4b4b4, Te6edf3sentContactKeyTb4b4b4)
Tb4b4b4}

Tf0883e@Test
Tff7b72fun Td2a8fffilteringRecipientPickerNarrowsNodesButKeepsChannelsVisibleTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runComposeUiTest Tb4b4b4{
Tff7b72val Te6edf3bob Tff7b72= Te6edf3TestDataFactoryTb4b4b4.Te6edf3createTestNodeTb4b4b4(Te6edf3num Tff7b72= T79c0ff4T79c0ff3Tb4b4b4, Te6edf3userId Tff7b72= Ta5d6ff"Ta5d6ff!b1c2d3e4Ta5d6ff"Tb4b4b4, Te6edf3longName Tff7b72= Ta5d6ff"Ta5d6ffBobTa5d6ff"Tb4b4b4, Te6edf3shortName Tff7b72= Ta5d6ff"Ta5d6ffBTa5d6ff"Tb4b4b4)
Te6edf3setContent Tb4b4b4{
Te6edf3EditWaypointDialogTb4b4b4(
Te6edf3waypoint Tff7b72= Te6edf3waypointTb4b4b4,
Te6edf3displayUnits Tff7b72= Te6edf3DisplayUnitsTb4b4b4.Te6edf3METRICTb4b4b4,
Te6edf3nodes Tff7b72= Te6edf3listOfTb4b4b4(Te6edf3nodeTb4b4b4, Te6edf3bobTb4b4b4)Tb4b4b4,
Te6edf3ourNode Tff7b72= Tff7b72nullTb4b4b4,
Te6edf3channelSet Tff7b72= Te6edf3channelSetTb4b4b4,
Te6edf3onSend Tff7b72= Tb4b4b4{ Te6edf3_Tb4b4b4, Te6edf3_ Tff7b72-Tff7b72> Tb4b4b4}Tb4b4b4,
Te6edf3onDelete Tff7b72= Tb4b4b4{Tb4b4b4}Tb4b4b4,
Te6edf3onDismissRequest Tff7b72= Tb4b4b4{Tb4b4b4}Tb4b4b4,
Tb4b4b4)
Tb4b4b4}

Te6edf3onNodeWithTextTb4b4b4(Ta5d6ff"Ta5d6ffPrimaryTa5d6ff"Tb4b4b4)Tb4b4b4.Te6edf3performClickTb4b4b4(Tb4b4b4)
Te6edf3onNodeWithTextTb4b4b4(Ta5d6ff"Ta5d6ffAliceTa5d6ff"Tb4b4b4)Tb4b4b4.Te6edf3assertIsDisplayedTb4b4b4(Tb4b4b4)
Te6edf3onNodeWithTextTb4b4b4(Ta5d6ff"Ta5d6ffBobTa5d6ff"Tb4b4b4)Tb4b4b4.Te6edf3assertIsDisplayedTb4b4b4(Tb4b4b4)

Te6edf3onNodeWithTextTb4b4b4(Te6edf3getStringTb4b4b4(Te6edf3ResTb4b4b4.Te6edf3stringTb4b4b4.Te6edf3node_filter_placeholderTb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3performTextInputTb4b4b4(Ta5d6ff"Ta5d6ffBobTa5d6ff"Tb4b4b4)

T8b949e// Filtering by node name narrows the node list. "Bob" now matches two elements — the filter field's own
T8b949e// typed-in value, and the surviving node row — so assert the count directly rather than picking an
T8b949e// arbitrary match by index, which would risk silently checking the wrong element.
Te6edf3onAllNodesWithTextTb4b4b4(Ta5d6ff"Ta5d6ffBobTa5d6ff"Tb4b4b4)Tb4b4b4.Te6edf3assertCountEqualsTb4b4b4(T79c0ff2Tb4b4b4)
Te6edf3onAllNodesWithTextTb4b4b4(Ta5d6ff"Ta5d6ffAliceTa5d6ff"Tb4b4b4)Tb4b4b4.Te6edf3assertCountEqualsTb4b4b4(T79c0ff0Tb4b4b4)
T8b949e// ...but channel rows are never filtered out. "Primary" also matches the (now-covered) "Send to" button
T8b949e// behind the dialog, so likewise assert the count (button + picker row) instead of an arbitrary index.
Te6edf3onAllNodesWithTextTb4b4b4(Ta5d6ff"Ta5d6ffPrimaryTa5d6ff"Tb4b4b4)Tb4b4b4.Te6edf3assertCountEqualsTb4b4b4(T79c0ff2Tb4b4b4)
Te6edf3onNodeWithTextTb4b4b4(Ta5d6ff"Ta5d6ffSecondaryTa5d6ff"Tb4b4b4)Tb4b4b4.Te6edf3assertIsDisplayedTb4b4b4(Tb4b4b4)
Tb4b4b4}
Tb4b4b4}

Served by rngit 1.5.2 - Generated in 0.24s